import { login } from "@/api/user"
import { getToken, removeToken, setToken } from "@/utils/auth"
import { getUserInfo } from "@/api/user"
import { constantRoutes, resetRouter } from "@/router"
const state = {
  token:  getToken() || null,
  // 用户信息
  userInfo: {},
  // 用户规则
  routes: constantRoutes   // 静态路由规则所有人
 
}
const mutations = {
  // 基于权限获取用户路由规则
setROutes(state, newRoutes){
  state.routes = [...constantRoutes, ...newRoutes]  // 静态路由+动态路由规则
},
  setToken(state,token){
    state.token = token     // 存仓库
    setToken(token)   //持久化存本地
    
  },
  // 存 用户信息
  setUserInfo(state,userInfo){
    state.userInfo = userInfo
  },
  removeToken(state){
    // 1. 删除仓库token
    state.token = null
    // 2. 删除本地token
   removeToken()
  },
  // 删除用户信息
  removeuserInfo(state){
    state.userInfo = {}
  }
}
const actions = {
  logout({commit}){
    // 1. 清除token
    commit('removeToken')
    // 2. 清除用户信息
    commit('removeuserInfo')

    // 3. 清除路由规则 重置路由规则
    resetRouter()
  },
 async login({commit}, obj){
    // 1. axios 配基地址 拦截器
    // 2. 请求维护在api中
    // 3. 请求发不出去 => 跨域 => 通过代理解决
    // setTimeout(() => {
    //   commit('setToken','hh')
    // }, 2000);
    
    // 存在跨域问题, 会报错,请求发布出去
  const res = await login(obj)
  // console.log(res);
  commit('setToken',res)
  },
 async getuserInfo({commit}){
    // 请求后端接口获取用户信息 通过mutation存下来
    // setTimeout(() => {
    //   commit('setUserInfo',{name:'张三',age:18})
    // }, 20000);
   const res = await getUserInfo()
   commit('setUserInfo',res)
   return res   // 返回用户信息
  }
}
export default{
  state,
  mutations,
  actions,
 namespaced: true
}